Reactã®`experimental_useTransition`ããã¯ã®åãæ¢æ±ãããã©ã³ãžã·ã§ã³ã管çããUIã®å¿çæ§ãåäžããã倿§ãªã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã§ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããŸãã
Reactãã©ã³ãžã·ã§ã³ããã¹ã¿ãŒãã: `experimental_useTransition` ã®è©³çް
é²åãç¶ããããã³ããšã³ãéçºã®äžçã§ã¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ïŒUXïŒã®æé©åãæéèŠèª²é¡ã§ãã Reactã¯ãã³ã³ããŒãã³ãããŒã¹ã®ã¢ãŒããã¯ãã£ãšå¹ççãªä»®æ³DOMã«ãããã€ã³ã¿ã©ã¯ãã£ããªWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®å ç¢ãªåºç€ãæäŸããŸãã ããããReactåºæã®åŒ·ã¿ããã£ãŠããããŸããŸãªUIç¶æ éã®ãã©ã³ãžã·ã§ã³ã管çããã¹ã ãŒãºãªã€ã³ã¿ã©ã¯ã·ã§ã³ã確ä¿ããããšã¯å°é£ãªå ŽåããããŸãã UIã®å¿çæ§ãé«ãããŠãŒã¶ãŒæºè¶³åºŠãåäžãããããã«èšèšããã匷åãªããŒã«ã§ãã`experimental_useTransition`ããã¯ã®ç»å Žã§ãã
ãã©ã³ãžã·ã§ã³ã®éèŠæ§ãçè§£ãã
ãã©ã³ãžã·ã§ã³ã¯ãææ°ã®Webã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠäžå¯æ¬ ã§ãã ãŠãŒã¶ãŒã«è¡åã®ç¶æ ãç¥ãããèŠèŠçãªãã£ãŒãããã¯ãæäŸããŸãã æ¬¡ã®ã·ããªãªãèããŠã¿ãŸãããã
- å€§èŠæš¡ãªããŒã¿ã»ããã®ãã£ã«ã¿ãªã³ã°: çµæãã¬ã³ããªã³ã°ãããã®ãåŸ ã€ããšã¯ãé²è¡ç¶æ³ã®æç¢ºãªè¡šç€ºããªããšã€ã©ã€ã©ããããšããããŸãã
- ç°ãªããã¥ãŒéã®ããã²ãŒã·ã§ã³: ããŒãžéã®ããã¡ãªããžã£ã³ãã¯ãããã¡ãªããå°éçã§ãªããšæããããå¯èœæ§ããããŸãã
- è€éãªUIèŠçŽ ã®æŽæ°: ã·ã§ããã³ã°ã«ãŒããããã·ã¥ããŒããªã©ã®ãã®ã®æŽæ°ãé ããšããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæªããªãå¯èœæ§ããããŸãã
é©åã«ç®¡çããããã©ã³ãžã·ã§ã³ããªããšããŠãŒã¶ãŒã¯ã¢ããªã±ãŒã·ã§ã³ãé ããå¿çããªããããã«ã¯å£ããŠãããšèªèããå¯èœæ§ããããŸãã ããã¯ããŠãŒã¶ãŒã®äžæºããšã³ã²ãŒãžã¡ã³ãã®äœäžããããŠæçµçã«ã¯ã¢ããªã±ãŒã·ã§ã³ã®æåãžã®æªåœ±é¿ã«ã€ãªããå¯èœæ§ããããŸãã ã°ããŒãã«ãªã³ã³ããã¹ãã§ã¯ããããã®åé¡ã¯ããŠãŒã¶ãŒãããŸããŸãªãããã¯ãŒã¯é床ãšããã€ã¹æ©èœãçµéšããã«ã€ããŠå¢å¹ ãããŸãã å Žæãæè¡çãªå¶éã«é¢ä¿ãªãããã¹ãŠã®ãŠãŒã¶ãŒã®ããã©ãŒãã³ã¹ãæé©åããããšããéèŠãªèšèšååã§ãã
`experimental_useTransition` ã®ç޹ä»
`experimental_useTransition`ã¯ãç¹å®ã®ç¶æ æŽæ°ããã©ã³ãžã·ã§ã³ãšããŠããŒã¯ã§ããReactããã¯ã§ãã ãããã®ãã©ã³ãžã·ã§ã³ã¯ããŠãŒã¶ãŒå ¥åã«ãã£ãŠçŽæ¥ããªã¬ãŒããããã®ãªã©ãç·æ¥ã®æŽæ°ãããäœãåªå 床ã«ãªããŸãã ããã¯ããã©ã³ãžã·ã§ã³ã¿ã¹ã¯ãããã¯ã°ã©ãŠã³ãã§å®è¡ãããŠããéãUIããŠãŒã¶ãŒã®ã¢ã¯ã·ã§ã³ã«å¿çãããŸãŸã§ããããšãæå³ããŸãã ããã¯çŸåšãå°æ¥ã®ReactããŒãžã§ã³ã§å€æŽãããå¯èœæ§ãããå®éšçãªæ©èœã§ããããšãçè§£ããããšãéèŠã§ãã ææ°ã®æ å ±ãšãã¹ããã©ã¯ãã£ã¹ã«ã€ããŠã¯ãåžžã«å ¬åŒã®Reactããã¥ã¡ã³ããåç §ããŠãã ããã
ããã¯ã¯2ã€ã®èŠçŽ ãæã€é åãè¿ããŸãã
- `startTransition`颿°: ãã®é¢æ°ã¯ããã©ã³ãžã·ã§ã³ãšããŠæ±ãããç¶æ æŽæ°ãã©ããããŸãã ãã®é¢æ°å ã®æŽæ°ã¯ãã¹ãŠãã©ã³ãžã·ã§ã³ãšèŠãªãããŸãã
- `isPending`ããŒã«å€: ãã®ããŒã«å€ã¯ãçŸåšãã©ã³ãžã·ã§ã³ãé²è¡äžãã©ããã瀺ããŸãã ããã䜿çšããŠãããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒãããã°ã¬ã¹ããŒããŸãã¯ãã®ä»ã®èŠèŠçãªåå³ã衚瀺ããŠããŠãŒã¶ãŒã«ãã£ãŒãããã¯ãæäŸã§ããŸãã
ã³ã¢ã³ã³ã»ãã
- åªå é äœä»ã: `experimental_useTransition`ã®äž»ãªå©ç¹ã¯ãæŽæ°ã®åªå é äœä»ãæ©èœã§ãã ç·æ¥ã®æŽæ°ïŒãã¿ã³ã¯ãªãã¯ãªã©ïŒã¯ããã«åŠçãããUIãå¿çæ§ãç¶æããŸãã ãã©ã³ãžã·ã§ã³æŽæ°ïŒããŒã¿ã®ãã§ãããªã©ïŒã¯ãç·æ¥ã®æŽæ°ãå®äºãããŸã§å»¶æãããŸãã
- äžŠè¡æ§: ãã©ã³ãžã·ã§ã³ã«ãããReactã¯è€æ°ã®ã¿ã¹ã¯ãåæã«å®è¡ã§ããŸãã Reactã¯ãç·æ¥ã®æŽæ°ãšãã©ã³ãžã·ã§ã³ã®æŽæ°ã®äž¡æ¹ãåæã«ã¬ã³ããªã³ã°ã§ãããããé·æéã®æäœäžã«UIããããã¯ãããã®ãé²ããŸãã
- ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹: UIãããå¿çæ§ã®é«ããã®ã«ããããšã§ã`experimental_useTransition`ã¯å šäœçãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãå€§å¹ ã«åäžãããŸãã ãŠãŒã¶ãŒã¯ãä»ã®èŠçŽ ãæäœããåã«UIãæŽæ°ãããã®ãåŸ ã€å¿ èŠã¯ãããŸããã
å®è·µçãªäŸ: `experimental_useTransition` ã®å®è£
`experimental_useTransition`ã䜿çšããŠReactã¢ããªã±ãŒã·ã§ã³ã匷åããæ¹æ³ã®å®è·µçãªäŸãããã€ãèŠãŠã¿ãŸãããã
1. é ç®ãªã¹ãã®ãã£ã«ã¿ãªã³ã°
ãŠãŒã¶ãŒãé ç®ããã£ã«ã¿ãªã³ã°ã§ãã補åã«ã¿ãã°ãæ³åããŠãã ããã ãã©ã³ãžã·ã§ã³ããªããšããã£ã«ã¿ãªã³ã°ã«ãããªã¹ããåã¬ã³ããªã³ã°ãããŠããéãUIãããªãŒãºããå¯èœæ§ããããŸãã `experimental_useTransition`ã䜿çšãããšããã®ããã»ã¹ãã¯ããã«ã¹ã ãŒãºã«ããããšãã§ããŸãã
import React, { useState, useTransition } from 'react';
function ProductList({ products }) {
const [searchTerm, setSearchTerm] = useState('');
const [isPending, startTransition] = useTransition();
const filteredProducts = products.filter(product =>
product.name.toLowerCase().includes(searchTerm.toLowerCase())
);
const handleSearchChange = (event) => {
startTransition(() => {
setSearchTerm(event.target.value);
});
};
return (
<div>
<input
type="text"
placeholder="Search products..."
value={searchTerm}
onChange={handleSearchChange}
/>
{isPending && <p>Loading...</p>}
<ul>
{filteredProducts.map(product => (
<li key={product.id}>{product.name}</li>
))}
</ul>
</div>
);
}
export default ProductList;
ãã®äŸã§ã¯ã
- 'react'ãã`useTransition`ãã€ã³ããŒãããŸãã
- `isPending`ãš`startTransition`ãåæåããŸãã
- `handleSearchChange`颿°ã¯ã`setSearchTerm`æŽæ°ã`startTransition`å ã«ã©ããããŸãã
- `isPending`ã䜿çšããŠããã£ã«ã¿ãªã³ã°ãé²è¡äžã«ãLoading...ãã¡ãã»ãŒãžã衚瀺ããŸãã
æ€çŽ¢å ¥åã¯ããªã¹ãããã£ã«ã¿ãªã³ã°ãããŠããéã§ãå¿çæ§ãç¶æããŸãã ãŠãŒã¶ãŒã¯UIãããªãŒãºããããšãªããå ¥åãç¶ããããšãã§ããŸãã
2. ããŒãžéã®ããã²ãŒã·ã§ã³
ã·ã³ã°ã«ããŒãžã¢ããªã±ãŒã·ã§ã³ïŒSPAïŒå ã®ããŸããŸãªããŒãžéã®ããã²ãŒã·ã§ã³ãããã©ã³ãžã·ã§ã³ã®æ©æµãåããããšãã§ããŸãã ããŒãžã«è¡šç€ºãããã³ã³ãã³ããæŽæ°ããããã²ãŒã·ã§ã³ã¡ãã¥ãŒãæ³åããŠãã ããã `experimental_useTransition`ã䜿çšãããšãã®ã¯ã·ã£ã¯ããåèªã¿èŸŒã¿ãåé¿ã§ããŸãã
import React, { useState, useTransition } from 'react';
function Navigation() {
const [currentPage, setCurrentPage] = useState('Home');
const [isPending, startTransition] = useTransition();
const handleNavigation = (page) => {
startTransition(() => {
setCurrentPage(page);
});
};
return (
<div>
<nav>
<button onClick={() => handleNavigation('Home')}>Home</button>
<button onClick={() => handleNavigation('About')}>About</button>
<button onClick={() => handleNavigation('Contact')}>Contact</button>
</nav>
{isPending && <p>Loading...</p>}
<main>
{currentPage === 'Home' && <h2>Welcome to the Home Page</h2>}
{currentPage === 'About' && <h2>About Us</h2>}
{currentPage === 'Contact' && <h2>Contact Us</h2>}
</main>
</div>
);
}
export default Navigation;
ãã®äŸã§ã¯ã
- `handleNavigation`颿°ã¯ã`startTransition`ã§ã©ãããããŠããŸãã
- `isPending`ã¯ãããã²ãŒã·ã§ã³äžã«ããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒã衚瀺ããããã«äœ¿çšãããŸãã
- ããŒãžã®æŽæ°äžã§ãã£ãŠããUIã¯å¿çæ§ãç¶æããŸãã
3. ããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒã䜿çšããããŒã¿ã®ãã§ãã
APIããã®ããŒã¿ã®ãã§ããã¯ãããçšåºŠã®æéããããå¯èœæ§ã®ããäžè¬çãªæäœã§ãã ãã©ã³ãžã·ã§ã³ã䜿çšãããšãããŒã¿ããã§ããããŠããéããŠãŒã¶ãŒã«ããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒã衚瀺ããŠããšã¯ã¹ããªãšã³ã¹ãã¯ããã«å¿«é©ã«ããããšãã§ããŸãã ããã¯ããŠãŒã¶ãŒã®å ŽæïŒããšãã°ãã€ã³ãããã©ãžã«ããŸãã¯æ¥æ¬ã®ãŠãŒã¶ãŒïŒã«å¿ããŠãããã¯ãŒã¯ã®é å»¶ã倧ããç°ãªãå¯èœæ§ãããåœéçãªã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠç¹ã«éèŠã§ãã ããã¯ã`isPending`ã®å€ãç¹ã«éèŠã«ãªãå Žæã§ãã
import React, { useState, useTransition, useEffect } from 'react';
function DataFetcher() {
const [data, setData] = useState(null);
const [isPending, startTransition] = useTransition();
useEffect(() => {
startTransition(async () => {
try {
// Simulate an API call
const response = await fetch('https://api.example.com/data');
const jsonData = await response.json();
setData(jsonData);
} catch (error) {
console.error('Error fetching data:', error);
// Handle the error gracefully (e.g., show an error message)
}
});
}, []); // Empty dependency array means this effect runs only once on mount.
return (
<div>
{isPending && <p>Loading data...</p>}
{data && (
<div>
<h2>Data Loaded:</h2>
<pre>{JSON.stringify(data, null, 2)}</pre>
</div>
)}
</div>
);
}
export default DataFetcher;
ãã®äŸã§ã¯ã
- `useEffect`ã䜿çšããŠãã³ã³ããŒãã³ãã®mountæã«ããŒã¿ã®ãã§ãããããªã¬ãŒããŸãã
- `fetch`åŒã³åºãã¯ã`startTransition`ã§ã©ãããããŠããŸãã
- `isPending`ã¯ãããŒã¿ããã§ããããŠããéã«ãLoading data...ãã¡ãã»ãŒãžã衚瀺ããããã«äœ¿çšãããŸãã
- ããŒã¿ãããŒãããããšãç»é¢ã«è¡šç€ºãããŸãã
ããã«ãããæœåšçã«æéããããAPIãªã¯ãšã¹ãã§ãã£ãŠããã·ãŒã ã¬ã¹ãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãä¿èšŒãããŸãã
é«åºŠãªãŠãŒã¹ã±ãŒã¹ãšèæ ®äºé
äžèšã®äŸã¯åºæ¬ã瀺ããŠããŸããã`experimental_useTransition`ã¯ããè€éãªã·ããªãªã«é©çšã§ããŸãã ãã ããèŠããŠããã¹ãéèŠãªèæ ®äºé ããããŸãã
1. CSSãã©ã³ãžã·ã§ã³ãšã¢ãã¡ãŒã·ã§ã³ãšã®çµã¿åãã
`experimental_useTransition`ã¯ãCSSãã©ã³ãžã·ã§ã³ããã³ã¢ãã¡ãŒã·ã§ã³ãšé£æºããŠããŸãæ©èœããŸãã `isPending`ã䜿çšããŠãèŠçŽ ã«ç°ãªãCSSã¯ã©ã¹ãé©çšãããã©ã³ãžã·ã§ã³ãé²è¡äžã§ããããšã瀺ãèŠèŠå¹æãããªã¬ãŒã§ããŸãã ããšãã°ãããŒã¿ã®ãã§ããäžã«èŠçŽ ããã§ãŒãã¢ãŠãããããŒã¿ãå°çããããã§ãŒãã€ã³ããããšãã§ããŸãã
.fade-in {
opacity: 1;
transition: opacity 0.5s ease-in-out;
}
.fade-out {
opacity: 0;
transition: opacity 0.5s ease-in-out;
}
import React, { useState, useTransition, useEffect } from 'react';
function AnimatedComponent() {
const [data, setData] = useState(null);
const [isPending, startTransition] = useTransition();
useEffect(() => {
startTransition(async () => {
// Simulate API call
await new Promise(resolve => setTimeout(resolve, 1000));
setData({ message: 'Data loaded!' });
});
}, []);
return (
<div className={isPending ? 'fade-out' : 'fade-in'}>
{data ? data.message : 'Loading...'}
</div>
);
}
export default AnimatedComponent;
2. ãšã©ãŒåŠç
`experimental_useTransition`ã䜿çšããå Žåã¯ãåžžã«é©åãªãšã©ãŒåŠçãå«ããŠãã ããã ãã©ã³ãžã·ã§ã³å ã§ãšã©ãŒãçºçããå ŽåããŠãŒã¶ãŒã«éç¥ããå¿ èŠããããŸãã ããã¯ããããã¯ãŒã¯ã®åé¡ããµãŒããŒã®åé¡ãç¹å®ã®å°åã§ããé »ç¹ã«çºçããå¯èœæ§ãããã°ããŒãã«ãªèšå®ã§ããŠãŒã¶ãŒãã¬ã³ããªãŒãªãšã¯ã¹ããªãšã³ã¹ãäœæããããã«éèŠã§ãã ãšã©ãŒã¡ãã»ãŒãžã衚瀺ããæäœãå詊è¡ããããã®ãªãã·ã§ã³ãæäŸããããšãäžå¯æ¬ ã§ãã ããšãã°ããããã¯ãŒã¯æ¥ç¶ãé ãããšãããã©ãã«ã·ã¥ãŒãã£ã³ã°æé ãå¿ èŠã«ãªãå¯èœæ§ããããµãŒããŒã®åé¡ãªã©ãå°ååºæã®ãã£ãŒãããã¯ãæ€èšããŠãã ããã
3. ãããŠã³ã¹ãšã¹ããããªã³ã°
å Žåã«ãã£ãŠã¯ãéå°ãªæŽæ°ãé²ãããã«ã`startTransition`颿°ã®å®è¡ããããŠã³ã¹ãŸãã¯ã¹ããããªã³ã°ããããšãã§ããŸãã ããã¯ãæ€çŽ¢ããã¯ã¹ãžã®å ¥åãªã©ããŠãŒã¶ãŒå ¥åãéãã·ããªãªã«ç¹ã«é¢é£ããŸãã Lodashã®`debounce`ãŸãã¯`throttle`颿°ãªã©ã®ã©ã€ãã©ãªã䜿çšãããšãç¶æ æŽæ°ã®é »åºŠãå¶åŸ¡ã§ããŸãã
import React, { useState, useTransition, useCallback } from 'react';
import { debounce } from 'lodash';
function DebouncedSearch() {
const [searchTerm, setSearchTerm] = useState('');
const [isPending, startTransition] = useTransition();
const debouncedSearch = useCallback(
debounce((term) => {
startTransition(() => {
// Perform search with term
console.log('Searching for:', term);
});
}, 300), // Debounce for 300ms
[startTransition]
);
const handleSearchChange = (event) => {
const term = event.target.value;
setSearchTerm(term);
debouncedSearch(term);
};
return (
<input
type="text"
placeholder="Search..."
value={searchTerm}
onChange={handleSearchChange}
/>
);
}
export default DebouncedSearch;
4. ã³ã³ããã¹ããšè€éãªç¶æ
è€éãªç¶æ 管çãœãªã¥ãŒã·ã§ã³ïŒReduxãZustandãªã©ïŒã䜿çšããå Žåã¯ã`experimental_useTransition`ã®çµ±åãæ éã«æ€èšããå¿ èŠãããå ŽåããããŸãã `startTransition`ã³ãŒã«ããã¯å ã§ç¶æ ãæŽæ°ããã®ãæè¯ã®æ¹æ³ã§ãããæŽæ°ã¯äžŠè¡ããŠåŠçãããŸãã 倿Žãã¢ããªã±ãŒã·ã§ã³ã®ã°ããŒãã«ç¶æ 管çã«ãåæ ãããããã©ãŒãã³ã¹ãæå€§åããããã«åã¬ã³ããªã³ã°ãå¹ççã«åŠçããŠããããšã確èªããŠãã ããã
5. ã¢ã¯ã»ã·ããªãã£ã«é¢ããèæ ®äºé
`experimental_useTransition`ã䜿çšããå®è£ ãåžžã«ã¢ã¯ã»ã¹å¯èœã§ããããšã確èªããŠãã ããã ããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒããã®ä»ã®UIèŠçŽ ã«é©åãªARIA屿§ïŒ`aria-busy`ã`aria-live`ãªã©ïŒãæäŸããŠãUIã®ç¶æ ãæ¯æŽæè¡ã«äŒããŸãã ããã¯ãã¹ã¯ãªãŒã³ãªãŒããŒã«äŸåããŠã¢ããªã±ãŒã·ã§ã³ãããã²ãŒãããèŠèŠé害ã®ãããŠãŒã¶ãŒã«ãšã£ãŠç¹ã«éèŠã§ãã è²ã®ã³ã³ãã©ã¹ãæ¯ãããã¹ãã©ãã«ãããã³ããŒããŒãããã²ãŒã·ã§ã³ãèæ ®ããŠãã ããã èŠèŠèŠçŽ ã®ä»£æ¿ããã¹ããæäŸããŸãã ã¢ã¯ã»ã·ããªãã£ã®ãã¹ããã©ã¯ãã£ã¹ã«åŸããšãé害ã®ãããŠãŒã¶ãŒãå«ããã¹ãŠã®ãŠãŒã¶ãŒã®ã¢ããªã±ãŒã·ã§ã³ã®äœ¿ãããããåäžããŸãã
ã°ããŒãã«ãªèŠç¹ãšèæ ®äºé
ã°ããŒãã«ãªèŠèŽè åãã®Webã¢ããªã±ãŒã·ã§ã³ãéçºããå Žåãæé©ãªããã©ãŒãã³ã¹ãšäœ¿ããããã確ä¿ããããã«ã次ã®èŠçŽ ãèæ ®ããããšãéèŠã§ãã
- ãããã¯ãŒã¯æ¡ä»¶: äžçã®ããŸããŸãªå°åã®ãŠãŒã¶ãŒã¯ãããŸããŸãªãããã¯ãŒã¯é床ãšã¬ã€ãã³ã·ãçµéšããŸãã ã¢ããªã±ãŒã·ã§ã³ã¯ãäœéæ¥ç¶ãé©åã«åŠçããããã«èšèšããå¿ èŠããããŸãã `experimental_useTransition`ããã¯ã¯ããããå®çŸããããã®éèŠãªããŒã«ã§ãã
- ããã€ã¹æ©èœ: ãŠãŒã¶ãŒã¯ããã€ãšã³ãã¹ããŒããã©ã³ããå€ããäœé»åã®ãã·ã³ãŸã§ãããŸããŸãªããã€ã¹ã䜿çšããŠã€ã³ã¿ãŒãããã«ã¢ã¯ã»ã¹ããŸãã ãã¹ãŠã®ãããã®ããã€ã¹åãã«æé©åããå¿ èŠãããããšã念é ã«çœ®ããŠãããã©ãŒãã³ã¹ãèæ ®ããŠã¢ããªã±ãŒã·ã§ã³ãèšèšããŸãã
- ããŒã«ãªãŒãŒã·ã§ã³ãšåœéåïŒi18nïŒ: ã¢ããªã±ãŒã·ã§ã³ãè€æ°ã®èšèªã«ç¿»èš³ãããããŸããŸãªæ¥ä»ãæå»ãé貚圢åŒãåŠçããŠããããšã確èªããŸãã ããã¯ãã°ããŒãã«ãªèŠèŽè ã«ãªãŒãããããã«äžå¯æ¬ ã§ãã
- æåçãªéã: ãŠãŒã¶ãŒã®è¡åã«åœ±é¿ãäžããå¯èœæ§ã®ããæåçãã¥ã¢ã³ã¹ãèªèããŠãã ããã ããå°åã§ããŸãããããšã¯ãå¥ã®å°åã§ã¯å¹æããªãå ŽåããããŸãã ãããã®éããçè§£ããã«ã¯ãããŸããŸãªæåã®ãŠãŒã¶ãŒã«ãããã¹ããäžå¯æ¬ ã§ãã
- ãµãŒããŒã®å Žæ: ã³ã³ãã³ãé ä¿¡ãããã¯ãŒã¯ïŒCDNïŒã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã®ã¢ã»ãããã°ããŒãã«ã«é åžããããŸããŸãªå°åã®ãŠãŒã¶ãŒã®ã¬ã€ãã³ã·ãæžããããšãæ€èšããŠãã ããã é©åãªCDNãããã€ããŒã®éžæã§ã¯ãã¿ãŒã²ãããªãŒãã£ãšã³ã¹ã®å°ççãªååžãèæ ®ããå¿ èŠããããŸãã
- ã¿ã€ã ãŸãŒã³: ã°ããŒãã«ãªãŠãŒã¶ãŒããŒã¹ã«ããã¿ã€ã ãŸãŒã³ã®éããšã¢ã¯ãã£ããã£ã®ã¹ã±ãžã¥ãŒã«ã«å¯Ÿå¿ããããã«æ©èœãèšèšããŸãã
ãããã®èŠçŽ ã念é ã«çœ®ãããšã§ãäžçäžã®ãŠãŒã¶ãŒã«è¯å®çã§ã¢ã¯ã»ã¹å¯èœãªãšã¯ã¹ããªãšã³ã¹ãæäŸããWebã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸãã
`experimental_useTransition`ã䜿çšããå©ç¹
`experimental_useTransition`ã䜿çšããå©ç¹ã¯å€å²ã«ããããŸãã
- ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ïŒUXïŒã®åäž: äž»ãªå©ç¹ã¯ãããã¹ã ãŒãºã§å¿çæ§ã®é«ãUIã€ã³ã¿ã©ã¯ã·ã§ã³ã§ãã ãŠãŒã¶ãŒã¯ãã¢ããªã±ãŒã·ã§ã³ãããé«éã§æ¥œãããã®ãšããŠèªèããŸãã
- ããã©ãŒãã³ã¹ã®åŒ·å: æŽæ°ã«åªå é äœãä»ããããšã§ãããŒã¿ãã§ãããè€éãªèšç®ãªã©ãé·æéã®æäœäžã®UIããããã³ã°ãé²ãããšãã§ããŸãã
- ãšã³ã²ãŒãžã¡ã³ãã®åäž: ããå¿çæ§ã®é«ãUIã¯ããŠãŒã¶ãŒãšã³ã²ãŒãžã¡ã³ããšæºè¶³åºŠã®åäžã«ã€ãªãããŸãã
- èªèãããã¬ã€ãã³ã·ã®åæž: ãŠãŒã¶ãŒã¯ããã©ã³ãžã·ã§ã³äžã«èŠèŠçãªãã£ãŒãããã¯ãæäŸããã¢ããªã±ãŒã·ã§ã³ãããé«éã§ãããšèªèããããšããããããŸãã
- ææ°ã®éçºãã©ã¯ãã£ã¹: å¹ççã§ææ°ã®ã³ãŒããäœæããããã®ææ°ã®Reactããã¯ã®äœ¿çšã
æœåšçãªæ¬ ç¹ãšå¶é
`experimental_useTransition`ã¯åŒ·åãªããŒã«ã§ããããã®å¶éãèªèããããšãéèŠã§ãã
- å®éšçãªæ©èœ: å®éšçãªæ©èœã§ããããããã®APIã¯å€æŽãããå¯èœæ§ããããŸãã ææ°ã®æŽæ°ã«ã€ããŠã¯ãå ¬åŒã®Reactããã¥ã¡ã³ãã«åŸãããšãéèŠã§ãã
- è€éãªããžãã¯ã®å¯èœæ§: è€æ°ã®ç¶æ ãšãã©ã³ãžã·ã§ã³ã管çãããšãã³ãŒãã®è€éããå¢ãå¯èœæ§ããããŸãã çè§£ããããä¿å®ãããããã®ãé£ããã³ãŒããåé¿ããã«ã¯ãæ³šææ·±ãèšèšãå¿ èŠã§ãã
- ãããã°ã®èª²é¡: é忿޿°ã®ãããã°ã¯ãåæã³ãŒãã®ãããã°ãããé£ããå ŽåããããŸãã React Developer Toolsãšã³ã³ãœãŒã«ãã®ã³ã°ã广çã«å©çšããŠãã ããã
- éå°ãªäœ¿çš: ãã¹ãŠã®ç¶æ æŽæ°ã«ãã©ã³ãžã·ã§ã³ãé©çšããããšã¯é¿ããŠãã ããã éå°ãªäœ¿çšã¯ãããã©ãŒãã³ã¹ã«æªåœ±é¿ãåãŒããããUIããã¢ãã¡ãŒã·ã§ã³åãããããå¯èœæ§ããããŸãã ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«ç®ã«èŠããéããçãããšãã§ããå Žæã§ãæ éã«äœ¿çšããŠãã ããã
- ãã©ãŠã¶ã®äºææ§: Reactã¯äžè¬çã«åªãããã©ãŠã¶ã®äºææ§ãæäŸããŸãããäžè²«ãããšã¯ã¹ããªãšã³ã¹ã確ä¿ããããã«ãå¿ ãããŸããŸãªãã©ãŠã¶ãšããã€ã¹ã§ãã¹ãããŠãã ããã
`experimental_useTransition`ãå©çšããããã®ãã¹ããã©ã¯ãã£ã¹
`experimental_useTransition`ãæå€§éã«æŽ»çšããã«ã¯ã次ã®ãã¹ããã©ã¯ãã£ã¹ã«åŸã£ãŠãã ããã
- ãŠãŒã¶ãŒå ¥åãåªå ãã: ãã¿ã³ã¯ãªãã¯ããã©ãŒã éä¿¡ãªã©ã®ãŠãŒã¶ãŒå ¥åã¢ã¯ã·ã§ã³ã`startTransition`ã§ã©ãããããŠããªãããšã確èªããŠãã ããã ãããã®ã¢ã¯ã·ã§ã³ã¯ã峿ãã£ãŒãããã¯ãæäŸããããã«ããã«åŠçããå¿ èŠããããŸãã
- ããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒã䜿çšãã: ãã©ã³ãžã·ã§ã³äžã«ã¯ãããŒãã£ã³ã°ã¹ãããŒãããã°ã¬ã¹ããŒãªã©ãåžžã«èŠèŠçãªãã£ãŒãããã¯ãæäŸããŸãã ããã«ããããŠãŒã¶ãŒã¯ã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ãåžžã«ææ¡ã§ããŸãã
- APIåŒã³åºããæé©åãã: APIåŒã³åºããå¹ççã§ãããæœåšçãªãšã©ãŒãé©åã«åŠçããŠããããšã確èªããŠãã ããã
- ãã©ã³ãžã·ã§ã³ãç°¡æœã«ä¿ã€: `startTransition`ã³ãŒã«ããã¯å ã«å€§éã®ããžãã¯ãé 眮ããããšã¯é¿ããŠãã ããã ãã©ã³ãžã·ã§ã³ãç¶æ æŽæ°ã«éäžãããŠãã ããã
- 培åºçã«ãã¹ããã: ããŸããŸãªããã€ã¹ãšãããã¯ãŒã¯æ¡ä»¶ã§ã¢ããªã±ãŒã·ã§ã³ããã¹ãããŠãäžè²«ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã確ä¿ããŸãã ãŠããããã¹ããçµ±åãã¹ãããšã³ãããŒãšã³ããã¹ããå«ããå æ¬çãªãã¹ãæŠç¥ãæ€èšããŠãã ããã
- ããã©ãŒãã³ã¹ããããã¡ã€ãªã³ã°ãã: React Developer ToolsãŸãã¯ãã©ãŠã¶ã®éçºè ããŒã«ã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ããããã¡ã€ãªã³ã°ããæœåšçãªããã«ããã¯ãç¹å®ããŸãã
- ææ°æ å ±ãå ¥æãã: å ¬åŒã®Reactããã¥ã¡ã³ããåç §ããŠãReactãš`experimental_useTransition`ããã¯ã®ææ°ã®éçºã«ã€ããŠåžžã«ææ°æ å ±ãå ¥æããŠãã ããã
çµè«
`experimental_useTransition`ããã¯ã¯ãReactéçºè ã®ããŒã«ãããã®è²Žéãªè³ç£ã§ãããå¿çæ§ãé«ããé åçãªãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãäœæããããã®åŒ·åãªæ¹æ³ãæäŸããŸãã ãã®ååãçè§£ããé©åã«é©çšããããšã§ãReactã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãšãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãå€§å¹ ã«åäžãããããšãã§ããŸãïŒç¹ã«ã°ããŒãã«ãªèŠèŽè åãïŒã Webãé²åãç¶ããã«ã€ããŠããããã®ææ°ã®ææ³ãåãå ¥ããããšã§ãäžçäžã®ãŠãŒã¶ãŒã«ã¢ããŒã«ãããããå¹ççã§ã¹ã±ãŒã©ãã«ã§ãŠãŒã¶ãŒãã¬ã³ããªãŒãªWebãšã¯ã¹ããªãšã³ã¹ãæ§ç¯ã§ããŸãã ããã¯å®éšçãªæ©èœã§ãããæ éãªäœ¿çšãšäžè²«ãããã¹ãã«ããããã®å©ç¹ã掻çšããŠããŠãŒã¶ãŒã«åªãããšã¯ã¹ããªãšã³ã¹ãæäŸã§ããããšãå¿ããªãã§ãã ããã
ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåªå ããããã©ãŒãã³ã¹ãæé©åãããã¹ããã©ã¯ãã£ã¹ãæ¡çšããããšã§ãäžçäžã®ãŠãŒã¶ãŒã«é¿ãWebã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸãã